home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 1995 May / PC Answers CD-ROM 7 (Future Publishing) (May 1995).iso / vbits / code / cert / trk3_eg / fmdrgdrp / opt2 / invent.exe / DBS.BAS < prev    next >
Encoding:
BASIC Source File  |  1993-08-20  |  5.4 KB  |  229 lines

  1. ' Array to hold database forms
  2.  
  3. Const MAX_DBS = 3
  4. Global DbsFormItems(MAX_DBS) As FormItem
  5. Global DbsForms(MAX_DBS) As DbsForm
  6. Global DbsFormDatabase(MAX_DBS) As Database
  7.  
  8. ' Schema type definition
  9.  
  10. Type TABLESCHEMA
  11.     tsName As String
  12.     tsType As Integer
  13.     tsSize As Integer
  14. End Type
  15.  
  16. ' Table extensions
  17.  
  18. Global Const TEX_CUSTS = "@cust"
  19. Global Const TEX_PARTS = "@part"
  20. Global Const TEX_ORDERS = "@ord"
  21.  
  22. Sub AppendField (tsc As TABLESCHEMA, newt As TableDef)
  23.     
  24.     ' Append a field to the evolving TableDef
  25.  
  26.     Dim newf As New Field
  27.     newf.Name = tsc.tsName
  28.     newf.Type = tsc.tsType
  29.     If tsc.tsSize Then newf.Size = tsc.tsSize
  30.     newt.Fields.Append newf
  31.  
  32. End Sub
  33.  
  34. Sub DbsCreate ()
  35.     
  36.     ' Create a DBS form by creating a new Access
  37.     ' Database.  Tables will be put into it later by
  38.     ' the user.
  39.  
  40.     If Not FormAvail(DbsFormItems()) Then
  41.         MsgBox "Cannot open more database forms"
  42.         Exit Sub
  43.     End If
  44.     fname$ = UtilsNewFile("New", "Database", "inv")
  45.     If fname$ = "" Then Exit Sub
  46.     i% = FormAlloc(DbsFormItems())
  47.     DbsFormItems(i%).fiFileName = fname$
  48.  
  49.     ' Now, create the database
  50.  
  51.     On Error GoTo dbcfail
  52.     Dim newdb As Database
  53.     Set newdb = CreateDatabase(fname$, DB_LANG_GENERAL)
  54.     DbsFormItems(i%).fiFileName = fname$
  55.     newdb.Close
  56.     Set DbsForms(i%) = New DbsForm
  57.     DbsForms(i%).Show
  58.     DbsForms(i%).Caption = fname$
  59.  
  60.     Exit Sub
  61.  
  62. dbcfail:
  63.     FormFree DbsFormItems(i%)
  64.     Exit Sub
  65. End Sub
  66.  
  67. Sub DbsDeleteTable ()
  68.     Dim formdb As Database
  69.  
  70.     ' This routine must always be called while a DBS
  71.     ' form is visible and there is a current table.
  72.     ' It deletes the specified table and all of its data.
  73.  
  74.     findex% = Val(MDIMain.ActiveForm.Tag)
  75.  
  76.     tbname$ = DbsFormItems(findex%).fiTable
  77.     Set formdb = DbsFormDatabase(findex%)
  78.  
  79.     ' Ask the user if they're sure before continuing
  80.  
  81.     ret% = MsgBox("Delete " & TnameDisp(tbname$) & " and all of its data?", MB_OKCANCEL Or MB_ICONEXCLAMATION)
  82.     If ret% <> IDOK Then Exit Sub
  83.  
  84.     ' Remove the table
  85.  
  86.     formdb.TableDefs.Delete tbname$
  87.  
  88.     ' Hack to cause DBS form to refresh
  89.  
  90.     MDIMain.ActiveForm.LoadRowCmd.Value = True
  91.  
  92. End Sub
  93.  
  94. Sub DbsNewTable ()
  95.     
  96.     ' Depending upon the type, pass the schema to the
  97.     ' NewTable routine for actual table creation
  98.  
  99.     DialogParm = ExtractFile(MDIMain.ActiveForm.Caption)
  100.     NewForm.Show MODAL
  101.     If Not DialogCancel Then
  102.         Select Case DialogParm
  103.             Case ID_NEW_PARTS
  104.                 NewTable (DialogParm2) + TEX_PARTS, PartsSchema()
  105.             Case ID_NEW_CUST
  106.                 NewTable (DialogParm2) + TEX_CUSTS, CustSchema()
  107.             Case ID_NEW_OBROWSE
  108.                 NewTable (DialogParm2) + TEX_ORDERS, OBrowseSchema()
  109.         End Select
  110.     End If
  111.  
  112. End Sub
  113.  
  114. Sub DbsOpen (fname As String)
  115.     
  116.     ' Open an existing table
  117.  
  118.     If Not FormAvail(DbsFormItems()) Then
  119.         MsgBox "Cannot open more database forms"
  120.         Exit Sub
  121.     End If
  122.     
  123.     i% = FormAlloc(DbsFormItems())
  124.     DbsFormItems(i%).fiFileName = fname
  125.  
  126.     ' Try to open the file
  127.  
  128.     On Error GoTo dbofail
  129.     Dim newdb As Database
  130.     Set newdb = OpenDatabase(fname)
  131.     newdb.Close
  132.  
  133.     Set DbsForms(i%) = New DbsForm
  134.     DbsForms(i%).Show
  135.     DbsForms(i%).Caption = fname
  136.     Exit Sub
  137.  
  138. dbofail:
  139.     FormFree DbsFormItems(i%)
  140.     Exit Sub
  141.  
  142. End Sub
  143.  
  144. Sub DbsOpenCurrentTable (findex As Integer)
  145.     
  146.     ' Open the table which is currently pointed to in
  147.     ' the opened DBS form
  148.  
  149.     fn$ = DbsFormItems(findex).fiFileName
  150.     tbn$ = DbsFormItems(findex).fiTable
  151.     Select Case TnameType(tbn$)
  152.         Case TEX_PARTS
  153.             PartsOpen fn$, tbn$
  154.         Case TEX_CUSTS
  155.             CustOpen fn$, tbn$
  156.         Case TEX_ORDERS
  157.             OBrowseOpen fn$, tbn$
  158.     End Select
  159.  
  160. End Sub
  161.  
  162. Sub InitDbs ()
  163.     FormInit DbsFormItems()
  164. End Sub
  165.  
  166. Sub NewTable (newname As String, tsch() As TABLESCHEMA)
  167.     
  168.     ' Generic routine to create a new table within the
  169.     ' database presented in the ActiveForm
  170.  
  171.     Dim newt As New TableDef
  172.  
  173.     Screen.MousePointer = HOURGLASS
  174.     SetStatus "Creating " & TnameDisp(newname) & " ..."
  175.  
  176.     For i% = 1 To UBound(tsch)
  177.         AppendField tsch(i%), newt
  178.     Next i%
  179.     Dim formdb As Database
  180.     Set formdb = DbsFormDatabase(Val(MDIMain.ActiveForm.Tag))
  181.     newt.Name = newname
  182.     formdb.TableDefs.Append newt
  183.  
  184.     Screen.MousePointer = DEFAULT
  185.  
  186.     MDIMain.ActiveForm.LoadRowCmd.Value = True
  187. End Sub
  188.  
  189. Function TnameDisp (tname As String)
  190.     
  191.     ' Strips our internal table suffix for proper display.
  192.  
  193.     i% = InStr(tname, "@")
  194.     If i% Then
  195.         TnameDisp = Left$(tname, i% - 1)
  196.     Else
  197.         TnameDisp = tname
  198.     End If
  199. End Function
  200.  
  201. Function TnameType (tname As String)
  202.     
  203.     ' Returns the type of a table by checking our suffix
  204.  
  205.     i% = InStr(tname, "@")
  206.     If i% Then
  207.         TnameType = Mid$(tname, i%)
  208.     Else
  209.         TnameType = "???"
  210.     End If
  211. End Function
  212.  
  213. Function TnameTypeDisp (tname As String)
  214.     
  215.     ' From our table suffix, returns a laymans term
  216.     ' for the table type
  217.  
  218.     Select Case TnameType(tname)
  219.         Case TEX_CUSTS
  220.             TnameTypeDisp = "Customers"
  221.         Case TEX_PARTS
  222.             TnameTypeDisp = "Parts"
  223.         Case TEX_ORDERS
  224.             TnameTypeDisp = "Orders"
  225.     End Select
  226.  
  227. End Function
  228.  
  229.